// 4-1 类&对象-
/**
 * C++ 类 & 对象
 * C++ 在 C 语言的基础上增加了面向对象编程，C++ 支持面向对象程序设计。类是 C++ 的核心特性，通常被称为用户定义的类型。
 * 类用于指定对象的形式，它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。
 * 
 * 
 * C++ 类定义
 * 定义一个类，本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据，但它定义了类的名称意味着什么，也就是说，它定义了类的对象包括了什么，以及可以在这个对象上执行哪些操作。
    
    class classname                  // class 关键字 classname 类名
    {
      Access specifiers:             // 访问修饰符: private / public/ protected
             Data members/variables; // 变量
             Member functions(){}    // 方法
    };                               //分号结束一个类

 * 
 * 类定义是以关键字 class 开头，后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。例如，我们使用关键字 class 定义 Box 数据类型，如下所示：
 
      class Box
      {
        public:
            double length;   // 盒子的长度
            double breadth;  // 盒子的宽度
            double height;   // 盒子的高度
      };
 
 * 关键字 public 确定了类成员的访问属性。在类对象作用域内，公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected，这个我们稍后会进行讲解。
 *
 * 
 * 定义 C++ 对象
 * 类提供了对象的蓝图，所以基本上，对象是根据类来创建的。声明类的对象，就像声明基本类型的变量一样。下面的语句声明了类 Box 的两个对象：

    Box Box1;          // 声明 Box1，类型为 Box
    Box Box2;          // 声明 Box2，类型为 Box

 * 对象 Box1 和 Box2 都有它们各自的数据成员。
 * 
 * 
 * 访问数据成员
 * 类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问。
                      
                      属性 length
       类的对象        属性 height
                      方法 set()
                      方法 get()

      使用.操作符来访问属性和方法
 * 
 * 为了更好地理解这些概念，让我们尝试一下下面的实例：
 * 
 * 需要注意的是，私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问。我们将在后续的教程中学习如何访问私有成员和受保护的成员。
*/

#include <iostream>
class Box
{
public:
  double length;
  double breadth;
  double height;
  void set(double, double, double); // 类方法声明
  double get(void);                 // 类方法声明
};

int main(void)
{
  Box box1;      // 声明box1 类型为Box
  Box box2;      // 声明box2 类型为Box
  Box box3;      // 声明box3 类型为Box
  double volume; // 用于存储体积

  box1.length = 5.0;
  box1.breadth = 5.0;
  box1.height = 5.0;
  volume = box1.length * box1.breadth * box1.height;
  std::cout << "box1的体积为 " << volume << std::endl;

  box2.length = 3.0;
  box2.breadth = 4.0;
  box2.height = 5.0;
  volume = box2.get();
  std::cout << "box2的体积为 " << volume << std::endl;

  box3.set(5.0, 12.0, 13.0);
  std::cout << "box3的长为 " << box3.length << std::endl;
  std::cout << "box3的宽为 " << box3.breadth << std::endl;
  std::cout << "box3的高为 " << box3.height << std::endl;
  volume = box3.get();
  std::cout << "box3的体积为 " << volume << std::endl;

  printf("----------end----------\n");
  // system("pause");
  return 0;
}

// 定义类方法
void Box::set(double len, double bre, double hei)
{
  length = len;
  breadth = bre;
  height = hei;
}

double Box::get(void)
{
  return length * breadth * height;
}